#pragma once

#include <cstdint>
#include <string>


namespace sysmonitor {
namespace memory {

// 内存信息结构体
struct MemoryInfo {
    uint64_t total = 0;          // 总内存(B)
    uint64_t free = 0;           // 空闲内存(B)
    uint64_t available = 0;      // 可用内存(B)
    uint64_t used = 0;           // 使用中内存(B)
    double usagePercent = 0.0;   // 使用率(%)

    // 格式化输出信息
    std::string toString() const;
};


// 交换空间信息结构体
struct SwapInfo {
    uint64_t total = 0;          // 总交换空间(B)
    uint64_t free = 0;           // 空闲交换空间(B)
    uint64_t used = 0;           // 使用中交换空间(B)
    double usagePercent = 0.0;   // 使用率(%)

    // 格式化输出信息
    std::string toString() const;
};


// 内存和交换空间综合信息
struct SystemMemoryInfo {
    MemoryInfo memory;           // 内存信息
    SwapInfo swap;               // 交换空间信息
};


// 获取系统内存信息
MemoryInfo getMemoryInfo();

// 获取交换空间信息
SystemMemoryInfo getSystemMemoryInfo();

}  // namespace memory
}  // namespace sysmonitor

